﻿#pragma once

#include <iostream>
#include <string>
#include <vector>

/// @brief 命令参数结构体
/// @param m_name 命令名
/// @param m_parameters 命令参数列表，每个参数为一个pair，第一个元素为参数名，第二个元素为参数值
struct CmdParameter {
    std::string m_name;
    std::vector<std::pair<std::string, std::string>> m_parameters;
};


/// @brief 命令行管理器
/// @details 使用命令模式对系统命令进行管理
/// @details 命令对象的创建者
class CommandManage
{
public:
    /// @brief 解析命令行参数
    /// @param argc 命令行参数个数
    /// @param argv 命令行参数列表
    static void Command(int argc, char* argv[]);

    /// @brief 解析命令行参数
    /// @param command 命令行参数字符串
    static bool Command(const std::string& command);

    /// @brief 解析命令行参数
    /// @param commands 命令参数列表
    static bool Command(const std::vector<CmdParameter>& commands);

private:
    static std::vector<std::string> split(const std::string& str);
    static std::pair<std::string, std::string> parseKeyValue(const std::string &arg);

};